bitkeeper revision 1.1159.258.120 (42848bfe8kMyWWcBA64rq7h7l7AyoA)
authormafetter@fleming.research <mafetter@fleming.research>
Fri, 13 May 2005 11:14:06 +0000 (11:14 +0000)
committermafetter@fleming.research <mafetter@fleming.research>
Fri, 13 May 2005 11:14:06 +0000 (11:14 +0000)
Shadow code bug fix (found by Ian) that was breaking refcounts, and subsequently
causing migration problems.

xen/arch/x86/memory.c

index 6fb5b059b103081a854d2d5b4634d1652d74746a..eaf324eb216826e69b2eefcbc8ef5fc00abb0812 100644 (file)
@@ -1607,13 +1607,14 @@ int do_update_va_mapping(unsigned long page_nr,
             unsigned l2_idx = page_nr >> (L2_PAGETABLE_SHIFT - L1_PAGETABLE_SHIFT);
             l2_pgentry_t gpde = linear_l2_table[l2_idx];
             unsigned long gpfn = l2_pgentry_val(gpde) >> PAGE_SHIFT;
+            unsigned long spfn;
 
-            if (get_shadow_status(&d->mm, gpfn))
+            if ((spfn = (get_shadow_status(&d->mm, gpfn) & PSH_pfn_mask)))
             {
-                unsigned long *gl1e = map_domain_mem(gpfn << PAGE_SHIFT);
+                unsigned long *sl1e = map_domain_mem(spfn << PAGE_SHIFT);
                 unsigned l1_idx = page_nr & (ENTRIES_PER_L1_PAGETABLE - 1);
-                gl1e[l1_idx] = sval;
-                unmap_domain_mem(gl1e);
+                sl1e[l1_idx] = sval;
+                unmap_domain_mem(sl1e);
                 put_shadow_status(&d->mm);
 
                 perfc_incrc(shadow_update_va_fail1);